package com.xyy.saas.payment.cores.api;

import com.xyy.saas.payment.cores.bo.*;
import com.xyy.saas.payment.cores.param.*;
import com.xyy.saas.payment.cores.vo.*;

import java.util.List;
import java.util.Map;

/**
 * 账户管理
 */
public interface PaymentMerchantApi {
    /**
     * 证件上传接口
     */
    @Deprecated
    ResultVO<UserPicBo> uploadPic(UploadPicVo uploadPicVo, String sign);

    /**
     * 添加联系人接口
     */
    @Deprecated
    ResultVO<ContactBo> addContact(MerchantContactVo merchantContactVo, String sign);

    /**
     * 创建商户接口
     */
    @Deprecated
    ResultVO<SubAppBo> createMerchant(MerchantCreateVo merchantCreateVo, String sign);

    /**
     * 创建用户接口
     */
    @Deprecated
    ResultVO<SubAppBo> createPerson(PersonalCreateVo personalCreateVo, String sign);

    /**
     * 查询用户余额
     */
    ResultVO<UserBo> queryAccount(QueryAccountVo queryAccountVo, String sign);

    ResultVO<CustAcctInfoVo> queryCustAcctId(String accountId);

    ResultVO<Boolean> settle(SettleOrderVo2 settleOrderVo2);

    /**
     * 查询账户余额
     */
    ResultVO<UserBo> queryAccountByAccountNo(String accountNo, String balanceAccountType);

    /**
     * 创建用户结算账户接口
     */
    @Deprecated
    ResultVO<SettleAccountBo> createSettleAccount(SettleAccountsCreateVo settleAccountsCreateVo, String sign);

    /**
     * 查询用户结算账户接口
     */
    @Deprecated
    ResultVO<SettleAccountBo> querySettleAccounts(SettleAccountsQueryVo settleAccountsQueryVo, String sign);

    /**
     * 创建账户接口
     */
    @Deprecated
    ResultVO createAccount(AccountVo accountVo, String sign);

    /**
     * 创建账户接口
     */
    @Deprecated
    ResultVO createAccountNew(AccountVoV1 accountVo, String sign);

    /**
     * 创建合规账户接口
     */
    @Deprecated
    ResultVO<String> createCPEAccount(AccountVo accountVo, String sign);

    /**
     * 创建个人账户
     */
    ResultVO<String> personalCertifyAccountCreate(PersonalAccountCreateVo personalAccountCreateVo, String sign);

    /**
     * 创建企业账户
     */
    ResultVO<String> merchantCertifyAccountCreate(MerchantAccountCreateVo merchantAccountCreateVo, String sign);

    /**
     * 短信认证接口
     */
    ResultVO<String> sendActiveCodeByPhoneNum(ActiveCodeVo activeCodeVo, String sign);

    /**
     * 企业类型获取
     */
    ResultVO<Map<String,String>> merchantCategoryQuery();

    /**
     * 个人提现卡换绑
     */
    ResultVO<String> personalSettleCardReBind(PersonalSettleCardBindVo personalSettleCardBindVo, String sign);

    /**
     * 企业提现卡换绑
     */
    ResultVO<String> merchantSettleCardReBind(MerchantSettleCardBindVo merchantSettleCardBindVo, String sign);

    /**
     * 银行查询
     */
    @Deprecated
    ResultVO<Map<String,String>> bankCodeQuery();

    /**
     * 银行查询
     */
    ResultVO<List<Pair>> bankQueryV2(BankQueryParam param);

    /**
     * 支行查询
     */
    ResultVO<Map<String, String>> subBankCodeQuery(String bankName, String subBankName);

    /**
     * 支行查询
     */
    ResultVO<List<Pair>> subBankQueryV2(SubBankQueryParam param);

    /**
     * 查询账户流水
     */
    ResultVO<QueryFuminRecordBo> queryBalanceRecord(QueryAccountBalanceDO queryAccountBalanceDO);

    /**
     * 获取授权人手机号
     */
    ResultVO<OperatorPhoneBo> queryOperatorPhone(OperatorPhoneBo param);

    /**
     * 行政区域查询
     */
    ResultVO<List<RegionVo>> regionQuery(RegionQueryParam param);

    /**
     * 会员间转账
     */
    ResultVO<Boolean> accountTransfer(AccountTransferParam param);
    /**
     * 购物金转账-ec商城专用-会员间交易
     */
    ResultVO<Boolean> virtualGoldTransfer(VirtualGoldTransferParam param);
    /**
     * 查询交易状态
     */
    ResultVO<QueryResultBo> queryTradeStatus(QueryTradeStatusParam param);
    ResultVO<Boolean> withdraw2(WithdrawAccountParam param);

    /**
     * 登记挂账
     */
    ResultVO<Boolean> registerOrder(RegisterOrderParam param);
}
